package B刷题.排序;

/**
 * @author wei.zhao
 * @description: 剑指 Offer II 075.数组相对排序
 * @date 2022年11月23日 10:35
 */
public class Code06_RelativeSortArray {

    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        // 当前待确认数字的索引位
        int index = 0;
        // 将在arr2中出现的数字排序
        for (int i1 : arr2) {
            for (int i2 = index; i2 < arr1.length; i2++) {
                if (arr1[i2] == i1) {
                    swap(arr1, i2, index);
                    index++;
                }
            }
        }
        // 将其余数字排序
        for (int i = index; i < arr1.length; i++) {
            int minI = i;
            for (int i1 = i; i1 < arr1.length; i1++) {
                if (arr1[i1] < arr1[minI]) {
                    minI = i1;
                }
            }
            swap(arr1, i, minI);
        }
        return arr1;
    }

    void swap(int[] arr, int i1, int i2) {
        int temp = arr[i1];
        arr[i1] = arr[i2];
        arr[i2] = temp;
    }
}
